package com.code.lightning.common.api;

import com.code.lightning.common.domain.BasicDataBaseMetaData;
import com.code.lightning.common.domain.BasicTableFieldMetaData;
import com.code.lightning.common.domain.BasicTableMetaData;

import java.sql.Connection;
import java.util.List;

/**
 * 基础数据库解析接口，提供获取基础数据库元数据的方法
 * @author LGX_TvT
 * @date 2021-01-15 14:48
 */
public interface BasicDataBaseInfoAnalyse {

    /**
     * 获取数据库元数据
     * @return BasicDataBaseMetaData
     */
    BasicDataBaseMetaData getDataBaseMetaData(String dbName, Connection connection);

    /**
     * 获取数据库元数据
     * @return BasicDataBaseMetaData
     */
    BasicDataBaseMetaData getDataBaseMetaData(String dbName);

    /**
     * 根据数据库连接获取所有的数据库元数据
     * @param connection 数据库链接
     * @return List<BasicDataBaseMetaData>
     */
    List<BasicDataBaseMetaData> getDataBaseMetaData(Connection connection);

    /**
     * 根据数据库连接获取所有的数据库元数据
     * @return List<BasicDataBaseMetaData>
     */
    List<BasicDataBaseMetaData> getDataBaseMetaData();

    /**
     * 根据数据库名称获取数据库内表的元数据
     * @param dbName 数据库名称
     * @param connection 数据库连接
     * @return  List<BasicTableMetaData>
     */
    List<BasicTableMetaData> getTableMetaData(String dbName, Connection connection);

    /**
     * 根据数据库名称获取数据库内表的元数据
     * @param dbName 数据库名称
     * @return  List<BasicTableMetaData>
     */
    List<BasicTableMetaData> getTableMetaData(String dbName);

    /**
     * 根据数据库名称以及表名称获取数据库内表的元数据
     * @param dbName 数据库名称
     * @param tbName 表名称
     * @param connection 数据库连接
     * @return  List<BasicTableMetaData>
     */
    BasicTableMetaData getTableMetaData(String dbName, String tbName, Connection connection);

    /**
     * 根据数据库名称以及表名称获取数据库内表的元数据
     * @param dbName 数据库名称
     * @param tbName 表名称
     * @return  List<BasicTableMetaData>
     */
    BasicTableMetaData getTableMetaData(String dbName, String tbName);


    /**
     * 根据数据库名以及表名称获取数据库表内字段的元数据
     * @param dbName 数据库名称
     * @param tbName 表名称
     * @param connection 数据库链接
     * @return List<BasicTableFieldMetaData>
     */
    List<BasicTableFieldMetaData> getTableFieldMetaData(String dbName, String tbName, Connection connection);

    /**
     * 根据数据库名以及表名称获取数据库表内字段的元数据
     * @param dbName 数据库名称
     * @param tbName 表名称
     * @return List<BasicTableFieldMetaData>
     */
    List<BasicTableFieldMetaData> getTableFieldMetaData(String dbName, String tbName);

}
